package videoCut;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.TimeUnit;

import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.rtf.RTFEditorKit;

import net.bramp.ffmpeg.FFmpeg;
import net.bramp.ffmpeg.FFmpegExecutor;
import net.bramp.ffmpeg.builder.FFmpegBuilder;
import org.apache.commons.lang3.StringUtils;

/**
 * 删除音轨
 */
public class TestFFmpegWrapper {
	public static void main(String[] args) throws IOException {
		generateNoAudioTrackVideo("D:\\videoTest\\111111.mp4","D:\\videoTest\\111111_2.mp4");
	}

	/**
	 *
	 * @param originFile
	 * @param startOffset
	 * @param duration
	 */
	public static void generateVideo(String originFile, String outputFile, Long startOffset, Long duration ) {
		try {
			FFmpeg ffmpeg = new FFmpeg("ffmpeg");
			// ffmpeg -ss 00:00:15 -t 00:00:05 -i test.mp4 -vcodec copy -acodec copy
			// output.mp4
			// # 从test.mp4视频的25秒位置开始，持续5秒的视频输出为output.mp4
			FFmpegBuilder builder = new FFmpegBuilder().setInput(originFile) // 输入文件路径
				.overrideOutputFiles(true) // 如果输出文件已经存在则覆盖
				.addOutput(outputFile) // 输出新文件路路径
				.setFormat("mp4") // 输出新文件格式
				.setStartOffset(startOffset, TimeUnit.SECONDS)
				.setDuration(duration, TimeUnit.SECONDS)
				.setStrict(FFmpegBuilder.Strict.NORMAL) // Allow FFmpeg to use experimental specs
				.done();
			FFmpegExecutor executor = new FFmpegExecutor(ffmpeg);
			// Run a one-pass encode
			executor.createJob(builder).run();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	//读取文件内容的方法
	public static String readRtf(String filePath) {
		String result = null;
		File file = new File(filePath);
		try {
			DefaultStyledDocument styledDoc = new DefaultStyledDocument();
			InputStream is = new FileInputStream(file);
			new RTFEditorKit().read(is, styledDoc, 0);
			result = new String(styledDoc.getText(0,styledDoc.getLength()).getBytes("ISO8859_1"),"GBK");//注意这边加上GBK即可；
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}

	public static File[] sort(File[] s){
        //中间值
        File temp =null;
        //外循环:我认为最小的数,从0~长度-1
        for(int j = 0; j<s.length-1;j++){
            //最小值:假设第一个数就是最小的
            String min = s[j].getName();
            //记录最小数的下标的
            int minIndex=j;
            //内循环:拿我认为的最小的数和后面的数一个个进行比较
            for(int k=j+1;k<s.length;k++){
                //找到最小值
                if (min.substring(0,min.indexOf(".")).compareTo(s[k].getName().substring(0,s[k].getName().indexOf(".")))>=0){
                    //修改最小
                    min=s[k].getName();
                    minIndex=k;
                }
            }
            //当退出内层循环就找到这次的最小值
            //交换位置
            temp = s[j];
            s[j]=s[minIndex];
            s[minIndex]=temp;
        }
        return s;
	}

    /**
	 * 移除音轨
	 * @param originFile
	 * @param startOffset
	 * @param duration
	 */
	public static void generateNoAudioTrackVideo(String originFile, String outputFile) {
		try {
			FFmpeg ffmpeg = new FFmpeg("ffmpeg");
			FFmpegBuilder builder = new FFmpegBuilder().setInput(originFile) // 输入文件路径
				.overrideOutputFiles(true) // 如果输出文件已经存在则覆盖
				.addOutput(outputFile) // 输出新文件路路径
				.setFormat(StringUtils.substringAfterLast(originFile, ".")) // 输出新文件格式
				.disableAudio()			//禁用音频
				.setStrict(FFmpegBuilder.Strict.NORMAL) // Allow FFmpeg to use experimental specs
				.done();
			FFmpegExecutor executor = new FFmpegExecutor(ffmpeg);
			// Run a one-pass encode
			executor.createJob(builder).run();
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("done");
	}
}
